package InterviewTest.q0403_listOfDepth;

import CommonClass.Common.ListNode;
import CommonClass.Common.TreeNode;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

public class Solution {
    /*
    注意需要返回的是一个listNode的数组
    所以每次BFS创建一个链表头，然后依次加入所有元素，ans加入链表头.next即可
     */
    public ListNode[] listOfDepth(TreeNode tree) {
        if (tree == null) return new ListNode[0];

        List<ListNode> ans = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(tree);
        while (!queue.isEmpty()) {
            int size = queue.size();
            ListNode path = new ListNode();
            ListNode cur = path;
            for (int i = 0; i < size; ++i) {
                TreeNode node = queue.poll();
                if (node.left != null) queue.offer(node.left);
                if (node.right != null) queue.offer(node.right);
                cur.next = new ListNode(node.val);
                cur = cur.next;
            }
            ans.add(path.next);
        }
        return ans.toArray(new ListNode[ans.size()]);
    }
}
